Debugging is a process of detecting and locating errors or events in computer programs and other software with a view to eliminating such errors or events. Debugging may also involve the step of eliminating such errors. The debugging process is implemented using a debugger, which is a computer program or programs for detecting, tracing, and eliminating errors or events in computer programs and other software. The latter are each referred to hereinafter as the “debugee”.
A breakpoint is a point in a computer program or software where execution may be halted, normally at a place that is convenient for restarting execution of the program or software (i.e., the debugee) from that point. That is, breakpoints are events deliberately inserted or “planted” in a debugee by a debugger to receive control when the debugee reaches the certain point during execution of the debugee. At that point, the debugger needs access to the state of the debugee (perhaps with the ability to change that state), and either to resume or terminate execution of the debugee.
If a breakpoint is applicable only in the context of a specific process, the breakpoint is considered to be a local breakpoint. The same applies for plural breakpoints. Application debuggers generally use local breakpoints.
In contrast, global breakpoints are breakpoints active across all processes executing in a computer system, where two or more processes may use the same code segment. In other words, global breakpoints are applicable in all instances of a program or software code segment. If a global breakpoint event occurs, the debugger can instrument the debugged code irrespective of the process running that code. In this case, the concept of one debugee does not apply, and the target is not the process being debugged but the code that is being executed. Kernel-level debuggers and some code-instrumentation tools use global breakpoints, because the focus is on the code being debugged/instrumented and not on any specific process context.
One conventional technique used in the Dynamic Trace tool on OS/2 operating system provides for global breakpoints. However, it is inconsistent in the sense that breakpoints are not active in the context of processes that make private copies of the code pages with breakpoints in those code pages.
Thus, a need clearly exists for an improved method of inserting and/or removing global breakpoints in software.